// strcat

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* mycat(char* restrict dst, const char* restrict src)
{
    char* ret = dst;
    while (*dst)
    {
        // 这句写在括号内，保证遇到'\0'时不继续加，否则会导致拼接不成功
        dst++;
    }
    while (*src)
    {
        *dst++ = *src++;
    }
    *dst = '\0';

    return ret;
}

int main(int argc, char const *argv[])
{
    // strcat
    // char * strcat(char *restrict s1, const char *restrict s2);
    // 把 s2 拷贝到 s1 后面，接成一个长字符串
    // 返回 s1
    // s1 必须有足够的空间
    char src[] = "World!";
    char dst[20] = "Hello ";
    printf("%s\n", mycat(dst, src));


    // 之前的strcpy和strcat都是不安全的，也可能空间不足
    // 安全版本
    // char * strncpy(char *restrict dst, const char *restrict src, size_t n);
    // char * strncat(char *restrict s1, const char *restrict s2, size_t n);
    // n 表示能够拷贝/连接的最大字符数

    // int strncmp(const char *s1, const char *s2, size_t n);
    // 判断前 n 个字符是否相等
    
    return 0;
}